package com.czt.mail.util;

import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author czt
 * @version 1.0
 * {@desc}
 * @date 2024/8/19 15:07
 */
public class SplitListUtils {

    /**
     * 拆分list集合 （后期如果使用次数多，可将其封装在工具类中）
     * 可将给定old集合根据sublength大小分割为多个 集合大小为 sublength的集合
     * @param oldList 需要拆分的集合
     * @param subLength 拆分的大小
     * @return
     * @param <T>
     */
    public static <T> List<List<T>> splitList(List<T> oldList, int subLength){
        ArrayList<List<T>> returnList = new ArrayList<>();
        ArrayList<T> newChildList = new ArrayList<>();
        if (CollectionUtils.isEmpty(oldList) || subLength <=0){
            returnList.add(newChildList);
            return returnList;
        }
        int size = oldList.size();
        if(subLength >= size){
            //数量不足sublength指定大小
            returnList.add(oldList);
            return returnList;
        }
        int pre = size/subLength; //共可以分为多少个大小为subLength的子集合
        int last = size%subLength;//剩余不够subLength的集合
//		将oldList分为：前面pre个集合，每个大小subLength
        for (int i = 0; i < pre; i++) {
            ArrayList<T> itemList = new ArrayList<>();
            for (int j = 0; j < subLength; j++) {
                itemList.add(oldList.get(i * subLength + j));
            }
            returnList.add(itemList);
        }
//		last进行处理
        if (last > 0){
            ArrayList<T> itemList = new ArrayList<>();
            for (int i = 0; i < last; i++) {
                itemList.add(oldList.get(pre * subLength + i));
            }
            returnList.add(itemList);
        }
        return returnList;
    }





}
